home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 1, No. 10 (1982-06)(Softdisk)(Side B).zip / Softdisk Magazette Volume 1, No. 10 (1982-06)(Softdisk)(Side B).do / ION.TEST.bas < prev    next >
BASIC Source File  |  1996-12-24  |  11KB  |  325 lines

  1. 10  REM <CTRL-J><CTRL-J>INITIALIZE<CTRL-J>
  2. 15  DIM W$(60),F$(60),WW$(60),FF$(60)
  3. 20 SOUND = 1
  4. 30  HIMEM: 16384
  5. 40  IF  PEEK(24576) = 72  THEN 80
  6. 50  PRINT  CHR$(4);"BLOAD HIRES CHAR"
  7. 60  PRINT  CHR$(4);"BLOAD CHAR TABLE"
  8. 70  GOSUB 8000
  9. 80  HGR2 
  10. 90  POKE 54,0: POKE 55,96
  11. 100  VTAB 1: HTAB 13: PRINT "Larry Seltzer"
  12. 110  VTAB 3: HTAB 12: PRINT "proudly presents"
  13. 120  VTAB 6: HTAB 14: PRINT "THE Ion Test"
  14. 130  VTAB 10: HTAB 1: PRINT "Which format would you like?"
  15. 140  VTAB 12: HTAB 1: PRINT "1.  Given FORMULA, enter NAME"
  16. 150  VTAB 14: HTAB 1: PRINT "2.  Given NAME, enter FORMULA"
  17. 160  PRINT : PRINT : PRINT "3.  Get instructions"
  18. 170 VT = 21: GOSUB 17000
  19. 180 TS =  VAL(G$)
  20. 190  IF TS > = 1  AND TS < = 3  THEN 1000
  21. 200  VTAB 23: PRINT "Invalid entry!"
  22. 210  POKE 6,10: POKE 7,150: CALL 768
  23. 220  VTAB 23: HTAB 1: PRINT "                "
  24. 230  GOTO 170
  25. 500  REM <CTRL-J><CTRL-J>SUBSCRIPT PRINTOUT<CTRL-J>
  26. 510 L =  LEN(A$):S = 0
  27. 520  FOR J = 1 TO L
  28. 530 L$ =  MID$ (A$,J,1)
  29. 540  IF L$ = "+"  OR L$ = "-"  THEN S = 1
  30. 550  IF S = 1  THEN 570
  31. 560  IF  ASC(L$) >48  AND  ASC(L$) <57  THEN SK = 1
  32. 570  VTAB VT +SK: HTAB HT +J -1: PRINT L$
  33. 580 SK = 0
  34. 590  NEXT J
  35. 600  RETURN 
  36. 1000  REM <CTRL-J><CTRL-J>PROGRAM START<CTRL-J>
  37. 1010  IF TS = 3  THEN 10000
  38. 1020  HGR2 : RESTORE 
  39. 1030 START = 1:FINISH = 60:TRY = 1
  40. 1060  VTAB 11: HTAB 1: PRINT "Reading data ....."
  41. 1070  FOR X = START TO FINISH
  42. 1080  READ W$(X),F$(X)
  43. 1090  NEXT X
  44. 1100  VTAB 11: HTAB 1: PRINT "Randomizing data ....."
  45. 1110  FOR X = START TO FINISH:C =  INT( RND(8) *FINISH) +1
  46. 1120 A$ = W$(X):W$(X) = W$(C):W$(C) = A$
  47. 1130 A$ = F$(X):F$(X) = F$(C):F$(C) = A$
  48. 1140  NEXT X
  49. 1150  HGR2 :VT = 1:HT = 1
  50. 1160  IF TS = 2  THEN SU = 1: GOTO 1180
  51. 1170 SU = 0
  52. 1180  FOR X = START TO FINISH
  53. 1190  HGR2 :VT = 1:HT = 1
  54. 1200 VT = VT +1: VTAB VT
  55. 1210  IF TS = 1  THEN A$ = F$(X): GOTO 1230
  56. 1220 A$ = W$(X)
  57. 1230  GOSUB 500
  58. 1240 VT = VT +3: VTAB VT
  59. 1250  IF TS = 1  THEN  PRINT "Enter name": GOTO 1270
  60. 1260  PRINT "Enter formula"
  61. 1270 VT = VT +2: GOSUB 17000
  62. 1280  IF G$ = "E"  OR G$ = "e"  THEN 1600
  63. 1290  POKE  -16368,0
  64. 1300  IF TS = 1  THEN 1340
  65. 1310 LL =  LEN(F$(X))
  66. 1320  IF F$(X) =  LEFT$(G$,LL)  THEN 1520
  67. 1330  GOTO 1400
  68. 1340 L =  LEN(G$):LL =  LEN(W$(X))
  69. 1350  IF L < >LL  THEN 1400
  70. 1360  FOR Y = 1 TO L
  71. 1370 L$ =  MID$ (G$,Y,1):LL$ =  MID$ (W$(X),Y,1)
  72. 1380  IF L$ < >LL$  AND  ASC(L$) +32 < > ASC(LL$)  AND  ASC(L$) -32 < > ASC(LL$)  THEN 1400
  73. 1390  NEXT Y: GOTO 1520
  74. 1400  PRINT : PRINT "That's not correct"
  75. 1401  IF   NOT SOUND  THEN 1410
  76. 1405  FOR J = 10 TO 100  STEP 10
  77. 1407  POKE 6,J: POKE 7,5: CALL 768: NEXT J
  78. 1410 W = W +1
  79. 1420 WW$(W) = W$(X):FF$(W) = F$(X)
  80. 1430  IF TS = 2  THEN 1480
  81. 1440  PRINT : PRINT "The correct name is ...."
  82. 1450  PRINT : HTAB (40 - LEN(W$(X)))/2
  83. 1460  PRINT W$(X)
  84. 1470  GOTO 1540
  85. 1480  PRINT : PRINT "The correct formula is ...."
  86. 1490  PRINT :HT = (40 - LEN(F$(X)))/2
  87. 1500 VT = 13:CENTER = 1:A$ = F$(X): GOSUB 500
  88. 1510  GOTO 1540
  89. 1520  PRINT : PRINT "RIGHT
  90. 1521  IF   NOT SOUND  THEN 1530
  91. 1522  FOR J = 100 TO 2  STEP  -8
  92. 1524  POKE 6,J: POKE 7,4: CALL 768
  93. 1525  NEXT 
  94. 1530 R = R +1
  95. 1540  VTAB 16
  96. 1550  PRINT "Press the SPACE BAR to continue"
  97. 1560  IF  PEEK( -16384) = 160  THEN 1580
  98. 1570  GOTO 1560
  99. 1580  POKE  -16368,0
  100. 1590  NEXT X
  101. 1600  HGR2 :X = 0:SUB = 0
  102. 1610  HTAB 14: VTAB 1: PRINT "Total Score"
  103. 1620  VTAB 3: HTAB 1: PRINT "Try # ";TRY
  104. 1630  PRINT : PRINT "Right :";R, INT((R/(R +W) *100) *10 +.5)/10;"%"
  105. 1640  PRINT : PRINT "Wrong :";W, INT((W/(R +W) *100) *10 +.5)/10;"%"
  106. 1650  PRINT : PRINT "Would you like to ...."
  107. 1660 X = X +1
  108. 1670  IF W = 0  THEN 1700
  109. 1680  PRINT : PRINT X".  Try again on the ones you missed"
  110. 1690 X = X +1
  111. 1700  PRINT : PRINT X".  Start the test over from the start"
  112. 1710 X = X +1
  113. 1720  PRINT : PRINT X".  End the test."
  114. 1730  PRINT : PRINT "Enter your choice"
  115. 1740 VT = 20: GOSUB 17000
  116. 1750 G =  VAL(G$)
  117. 1760  ON G +1 *(W = 0) GOTO 1770,80,20000
  118. 1770 TRY = TRY +1
  119. 1780  FOR X = 1 TO W
  120. 1790 W$(X) = WW$(X):F$(X) = FF$(X)
  121. 1800  NEXT X
  122. 1810 START = 1:FINISH = W:W = 0:R = 0
  123. 1820  IF TS = 2  THEN SUB = 1
  124. 1830  HGR2 
  125. 1840  GOTO 1100
  126. 8000  REM <CTRL-J><CTRL-J>MUSICAL POKES
  127. 8010  POKE 768,173: POKE 769,48: POKE 770,192: POKE 771,136: POKE 772,208: POKE 773,4: POKE 774,198: POKE 775,7
  128. 8020  POKE 776,240: POKE 777,8: POKE 778,202: POKE 779,208: POKE 780,246: POKE 781,166: POKE 782,6: POKE 783,76: POKE 784,0: POKE 785,03: POKE 786,96
  129. 8030  RETURN 
  130. 10000  REM <CTRL-J><CTRL-J>INSTRUCTIONS<CTRL-J>
  131. 10010  HGR2 : VTAB 1
  132. 10020  PRINT  TAB( 14);"Instructions"
  133. 10030  PRINT : PRINT "You should know something about IONS if"
  134. 10040  PRINT : PRINT "you are going to take this test.  If you";
  135. 10050  PRINT : PRINT "don't, it won't make much sense."
  136. 10060  PRINT : PRINT : PRINT "You have a choice as to how you would"
  137. 10070  PRINT : PRINT "like to be tested.  You can see the name";
  138. 10080  PRINT : PRINT "and type in the formula, or see the"
  139. 10090  PRINT : PRINT "formula and type in the name."
  140. 10100  GOSUB 15000
  141. 10110  PRINT : PRINT "If you are entering the FORMULA:"
  142. 10120  PRINT : PRINT 
  143. 10130  PRINT : PRINT "1.  You MUST enter lowercase letters"
  144. 10140  PRINT : PRINT "    where appropriate.  Use ESC to shift";
  145. 10150  PRINT : PRINT "    between upper and lowercase."
  146. 10160  PRINT : PRINT "    ESC = next key uppercase."
  147. 10170  PRINT : PRINT "    ESC ESC = shift lock."
  148. 10180  PRINT : PRINT "    ESC in shift lock mode will return"
  149. 10190  PRINT : PRINT "        you to lowercase
  150. 10200  GOSUB 15000
  151. 10210  PRINT : PRINT "2.  The ion's charge MUST be entered in"
  152. 10220  PRINT : PRINT "    addition to the formula.  A positive";
  153. 10230  PRINT : PRINT "    charge is entered as '+', and a"
  154. 10240  PRINT : PRINT "    negative charge is entered as '-'."
  155. 10250  PRINT : PRINT "    If the charge is greater than 1,"
  156. 10260  PRINT : PRINT "    type the sign, then the number."
  157. 10270  PRINT : PRINT "    (example: +2, -3)"
  158. 10280  PRINT 
  159. 10290  PRINT : PRINT "    IF THE MAGNITUDE OF THE CHARGE IS 1,";
  160. 10300  PRINT : PRINT "    THEN USE ONLY '+' OR '-', NOT '+1'"
  161. 10310  PRINT : PRINT "    OR '-1'."
  162. 10320  GOSUB 15000
  163. 10330  PRINT "3.  You MUST have ONE SPACE between the"
  164. 10340  PRINT : PRINT "    last letter of the formula and the"
  165. 10350  PRINT : PRINT "    sign of the charge."
  166. 10360  GOSUB 15000
  167. 10370  PRINT "If you are entering the NAME:"
  168. 10380  PRINT : PRINT "1.  You may type the name in upper or "
  169. 10390  PRINT : PRINT "    lowercase letters."
  170. 10400  PRINT : PRINT : PRINT "2.  If you want to type in 'IRON II',"
  171. 10410  PRINT : PRINT "    don't type in 'IRON 2'."
  172. 10420  PRINT : PRINT "    USE ONLY ROMAN NUMERALS."
  173. 10430  GOSUB 15000
  174. 10440  PRINT "Typing CTRL-S anytime the computer is"
  175. 10450  PRINT : PRINT "waiting for input will toggle the sound"
  176. 10460  PRINT : PRINT "between on and off.  (the CTRL-S will"
  177. 10470  PRINT : PRINT "NOT become part of your input)."
  178. 10480  PRINT : PRINT : PRINT "Typing in 'E' in place of an answer"
  179. 10490  PRINT : PRINT "will end a round of questioning."
  180. 10500  GOSUB 15000
  181. 10510  GOTO 80
  182. 12000  REM <CTRL-J><CTRL-J>DATA<CTRL-J>
  183. 12010  DATA acetate,CH3COO - 
  184. 12020  DATA aluminum,Al +3
  185. 12030  DATA ammonium,NH4 +
  186. 12040  DATA barium,Ba +2
  187. 12050  DATA bismuth,Bi +3
  188. 12060  DATA bromide,Br -
  189. 12070  DATA cadmium,Cd +2
  190. 12080  DATA calcium,Ca +2
  191. 12090  DATA carbonate,CO3 -2
  192. 12100  DATA chlorate,ClO3 -2
  193. 12110  DATA chloride,Cl -
  194. 12120  DATA chlorite,Cl2 -
  195. 12130  DATA chromate,CrO4 -2
  196. 12140  DATA chromium III,Cr +3
  197. 12150  DATA cobalt II,Co +2
  198. 12160  DATA copper I,Cu +
  199. 12170  DATA copper II,Cu +2
  200. 12180  DATA cyanide,CN -
  201. 12190  DATA dichromate,Cr2O7 -2
  202. 12200  DATA dihydrogen phosphate,H2PO4 -
  203. 12210  DATA flouride,F -
  204. 12220  DATA hydride,H -
  205. 12230  DATA hydrogen,H +
  206. 12240  DATA hydrogen carbonate,HCO3 -
  207. 12250  DATA hydrogen sulfate,HSO4 -
  208. 12260  DATA hydrogen sulfite,HSO3 -
  209. 12270  DATA hydronium,H3O +
  210. 12280  DATA hydroxide,OH -
  211. 12290  DATA hypochlorite,ClO -
  212. 12300  DATA iodate,IO3 -
  213. 12310  DATA iodide,I -
  214. 12320  DATA iron II,Fe +2
  215. 12330  DATA iron II,Fe +3
  216. 12340  DATA lead II,Pb +2
  217. 12350  DATA lithium,Li +
  218. 12360  DATA magnesium,Mg +2
  219. 12370  DATA manganese,Mn +
  220. 12380  DATA mercury I,Hg2 +2
  221. 12390  DATA mercury II,Hg +2
  222. 12400  DATA monohydrogen phosphate,HPO4 -2
  223. 12410  DATA nickel II,Ni +2
  224. 12420  DATA nitrate,NO3 -
  225. 12430  DATA nitrite,NO2 -
  226. 12440  DATA oxalate,C2O4 -2
  227. 12450  DATA oxide,O -2
  228. 12460  DATA perchlorate,ClO4 -
  229. 12470  DATA permanganate,MnO4 -
  230. 12480  DATA peroxide,O2 -2
  231. 12490  DATA phosphate,PO4 -3
  232. 12500  DATA phosphite,PO3 -3
  233. 12510  DATA potassium,K +
  234. 12520  DATA silver,Ag +
  235. 12530  DATA sodium,Na +
  236. 12540  DATA strontium,Sr +2
  237. 12550  DATA sulfate,SO4 -2
  238. 12560  DATA sulfide,S -2
  239. 12570  DATA sulfite,SO3 -2 
  240. 12580  DATA thiocyanate,SCN -
  241. 12590  DATA tin II,Sn +2
  242. 12600  DATA tin IV,Sn +4
  243. 12610  DATA zinc,Zn +2
  244. 15000  REM <CTRL-J><CTRL-J>PRESS ANY KEY<CTRL-J>
  245. 15010  POKE  -16368,0
  246. 15020 CU$ = "!/-\": VTAB 24
  247. 15030  PRINT "! Press any key"
  248. 15040 C = 1:L = 4
  249. 15050  VTAB 24: HTAB 1: PRINT  MID$ (CU$,C,1)
  250. 15060 KEY =  PEEK( -16384): IF KEY <128  THEN C = C +1 -L *(C = L): GOTO 15050
  251. 15070  HGR2 : VTAB 1: RETURN 
  252. 17000  REM <CTRL-J><CTRL-J>HIRES INPUT<CTRL-J>
  253. 17010  POKE  -16368,0
  254. 17020  HTAB 1: VTAB VT
  255. 17030  PRINT "===>       "
  256. 17040 HT = 4
  257. 17050 G$ = ""
  258. 17060 A =  PEEK( -16384)
  259. 17070  VTAB VT: HTAB HT +1: PRINT " "
  260. 17080  VTAB VT: HTAB HT +1: PRINT  CHR$(95)
  261. 17090  IF A <127  THEN 17060
  262. 17100  POKE  -16368,0
  263. 17110  IF A = 141  THEN 17610
  264. 17120  IF A = 155  THEN 17590
  265. 17130  IF A < >147  THEN 17160
  266. 17140 SOUND = SOUND +1: IF SOUND = 2  THEN SOUND = 0
  267. 17150  GOTO 17060
  268. 17160  IF A < >136  THEN 17380
  269. 17170  IF   NOT SOUND  THEN 17210
  270. 17180  FOR Z = 1 TO 20  STEP 5
  271. 17190  POKE 6,Z: POKE 7,2: CALL 768
  272. 17200  NEXT 
  273. 17210 L =  LEN(G$)
  274. 17220  IF L >1  THEN 17320
  275. 17230  IF L = 1  THEN 17290
  276. 17240  IF   NOT SOUND  THEN 17290
  277. 17250  FOR Y = 1 TO 10
  278. 17260  FOR Z = 1 TO 25  STEP 6
  279. 17270  POKE 6,Z: POKE 7,3: CALL 768
  280. 17280  NEXT : NEXT 
  281. 17290  VTAB VT: HTAB 5: PRINT "     "
  282. 17300 G$ = "":HT = 4
  283. 17310  GOTO 17060
  284. 17320 L = L -1
  285. 17325  IF  RIGHT$(G$,1) = "+"  OR  RIGHT$(G$,1) = "-"  THEN S = 0
  286. 17330 G$ =  LEFT$(G$,L)
  287. 17340 HT = L +4
  288. 17350  VTAB VT: HTAB HT +1: PRINT "  "
  289. 17360  VTAB VT +1: HTAB HT +1: PRINT " "
  290. 17370  GOTO 17060
  291. 17380 A = A -128
  292. 17390  IF A >64  AND A <91  THEN 17420
  293. 17400 A$ =  CHR$(A)
  294. 17410  GOTO 17430
  295. 17420 A$ =  CHR$(A +32 -32 *(UC >0))
  296. 17430 G$ = G$ +A$
  297. 17440 L =  LEN(G$)
  298. 17450 HT = L +4
  299. 17460  IF SUB = 0  THEN 17520
  300. 17470  IF A$ = "+"  OR A$ = "-"  THEN S = 1
  301. 17480  IF S = 1  THEN 17520
  302. 17490  IF  ASC(A$) <48  OR  ASC(A$) >57  THEN 17520
  303. 17500  VTAB VT +1: HTAB HT: PRINT A$
  304. 17510  VTAB VT: HTAB HT: PRINT " ": GOTO 17530
  305. 17520  VTAB VT: HTAB HT: PRINT A$
  306. 17530  IF UC = 1  THEN UC = 0
  307. 17540  IF   NOT SOUND  THEN 17580
  308. 17550  FOR Z = 20 TO 1  STEP  -2
  309. 17560  POKE 6,Z: POKE 7,2: CALL 768
  310. 17570  NEXT 
  311. 17580  GOTO 17060
  312. 17590 UC = UC +1: IF UC = 3  THEN UC = 0
  313. 17600  GOTO 17060
  314. 17610  VTAB VT: HTAB HT +1: PRINT " "
  315. 17620  IF   NOT SOUND  THEN 17670
  316. 17630  FOR Y = 1 TO 3
  317. 17640  FOR Z = 40 TO 1  STEP  -4
  318. 17650  POKE 6,Z: POKE 7,2: CALL 768
  319. 17660  NEXT : NEXT 
  320. 17670 VT = VT +2
  321. 17680  RETURN 
  322. 20000  REM <CTRL-J><CTRL-J>END<CTRL-J>
  323. 20010  TEXT 
  324. 20020  HOME 
  325. 20030  END